///*
// * To change this template, choose Tools | Templates
// * and open the template in the editor.
// */
//package org.sadhar.sipp.laporanrekapitulasanggaranrabunit;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//import org.sadhar.sia.common.ClassConnection;
//
///**
// *
// * @author kris
// */
//public class LaporanRekapitulasiAnggaranRABUnitDAOImpl implements LaporanRekapitulasiAnggaranRABUnitDAO {
//
//    public LaporanRekapitulasiAnggaranRABUnitDAOImpl() {
//        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
//    }
//
//    public String getTahunKelompokAnggaranYangDigunakan(String tahun) throws Exception {
//        String sql = "select tahunKelompok from ppmk.kelompokAnggaranYangDigunakan where" +
//                " tahunAnggaran=?";
//        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
//        String tahunKelompok = null;
//        for (Map map : result) {
//            tahunKelompok = map.get("tahunKelompok").toString();
//        }
//        return tahunKelompok;
//    }
//
//    public List<Map> getResultForReport(String tahunAnggaran, String tahunKelompok) throws Exception {
//        String sql = "select Nama_unit_kerja,namaPosBiaya,sum(harga*kuantitas) as hasil from ppmk.anggaranRABNonRapatKerja as rab " +
//                " inner join ppmk.kelompokBiaya as klpk on rab.kodePosBiaya=klpk.kodePosBiaya " +
//                " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=rab.kodePosBiaya inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya " +
//                " inner join kamus.unkerja as un on un.Kd_unit_kerja=rab.kodeUnit where isRevisi='Y' and isSudahDiajukan='Y' " +
//                " and rab.tahun=? and klpk.tahunKelompok=? group by kodeUnit,rab.kodePosBiaya " +
//                " union all " +
//                " select Nama_unit_kerja,namaPosBiaya,if(jumlahHari=0,sum(harga*kuantitas),sum(harga*kuantitas*jumlahHari))from ppmk.kelompokBiaya as klpk " +
//                " inner join ppmk.subkelompokAnggaranBiaya as sub on klpk.kodeKelompokBiaya=sub.kodeKelompokBiaya " +
//                " inner join ppmk.anggaranBiayaRapatKerjaDanKegiatan as rab_rapat on rab_rapat.kodePosBiaya=sub.KodePosBiaya " +
//                " inner join ppmk.rapatKerjaUnit as rapat on rab_rapat.kodeRapatKerjaSubKegiatan=rapat.idRapatKerjaUnit " +
//                " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=klpk.kodePosBiaya " +
//                " inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya " +
//                " inner join kamus.unkerja as un on un.Kd_unit_kerja=rapat.kodeUnit where klpk.kodeJenisBiaya=1 " +
//                " and klpk.kodePosBiaya=5 and tahunKelompok=? and rapat.tahun=? and isRapat='Y' and isRevisi='Y' and isSudahDiajukan='Y' group by kodeUnit,klpk.kodePosBiaya" +
//                " union all" +
//                " select Nama_unit_kerja,namaPosBiaya,if(jumlahHari=0,sum(harga*kuantitas),sum(harga*kuantitas*jumlahHari))from ppmk.kelompokBiaya as klpk " +
//                " inner join ppmk.subkelompokAnggaranBiaya as sub on klpk.kodeKelompokBiaya=sub.kodeKelompokBiaya " +
//                " inner join ppmk.anggaranBiayaRapatKerjaDanKegiatan as rab_rapat on rab_rapat.kodePosBiaya=sub.KodePosBiaya " +
//                " inner join ppmk.kegiatanUnit as keg on rab_rapat.kodeRapatKerjaSubKegiatan=keg.kodeKegiatanUnit " +
//                " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=klpk.kodePosBiaya " +
//                " inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya " +
//                " inner join ppmk.kelompokRKA as klpkRKA on klpkRKA.kodeKelompokKegiatan=keg.kodeKelompokKegiatan and klpkRKA.kodePosBiaya=klpk.kodePosBiaya " +
//                " inner join kamus.unkerja as un on un.Kd_unit_kerja=keg.kodeUnit where klpk.kodeJenisBiaya=2 " +
//                " and tahunKelompok=? and keg.tahun=? and isRapat='N' and isRevisi='Y' and isSudahDiajukan='Y' group by kodeUnit,  klpk.kodePosBiaya order by Nama_unit_kerja,namaPosBiaya";
//
//        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{
//                    tahunAnggaran, tahunKelompok,
//                    tahunKelompok, tahunAnggaran,
//                    tahunKelompok, tahunAnggaran
//                });
//
//        return result;
//    }
//
//    public List<Map> getNamaUnitKerja(String tahunAnggaran, String tahunKelompok) throws Exception {
//        List<Map> result = ClassConnection.getJdbc().queryForList("" +
//                "select distinct Nama_unit_kerja from laporanRekapitulasiView where tahun=? and tahunKelompok=?",
//                new Object[]{tahunAnggaran, tahunKelompok});
//        return result;
//    }
//
//    public List<Map> getNamaPosBiaya(String tahunAnggaran, String tahunKelompok) throws Exception {
//        List<Map> result = ClassConnection.getJdbc().queryForList("" +
//                "select distinct namaPosBiaya from laporanRekapitulasiView where tahun=? and tahunKelompok=?",
//                new Object[]{tahunAnggaran, tahunKelompok});
//        return result;
//    }
//
//    public Double getHasil(String tahunAnggaran, String tahunKelompok, String namaUnit, String namaPos) throws Exception {
//        List<Map> result = ClassConnection.getJdbc().queryForList("" +
//                "select Nama_unit_kerja,namaPosBiaya,hasil from laporanRekapitulasiView where tahun=? and tahunKelompok=? and" +
//                " Nama_unit_kerja=? and namaPosBiaya=?",
//                new Object[]{tahunAnggaran, tahunKelompok, namaUnit, namaPos});
//        Double hasil=null;
//        for(Map map:result){
//            hasil=Double.valueOf(map.get("hasil").toString());
//        }
//        return hasil;
//    }
//}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.laporanrekapitulasanggaranrabunit;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.sadhar.sia.common.ClassConnection;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.zkoss.zul.Messagebox;

/**
 *
 * @author kris
 */
public class LaporanRekapitulasiAnggaranRABUnitDAOImpl implements LaporanRekapitulasiAnggaranRABUnitDAO {

    public LaporanRekapitulasiAnggaranRABUnitDAOImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    /**
     * Digunakan untuk mendapatkan tahun kelompok dari tabel ppmk.kelompokAnggaranYangDigunakan
     * berdasarkan tahunAnggaran
     * @param tahun kondisi yang digunakan untuk mendapatkan tahun kelompok
     * @return
     * @throws Exception
     */
    public String getTahunKelompokAnggaranYangDigunakan(String tahun) throws Exception {
        String sql = "select tahunKelompok from ppmk.kelompokAnggaranYangDigunakan where"
                + " tahunAnggaran=?";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
        String tahunKelompok = null;
        for (Map map : result) {
            tahunKelompok = map.get("tahunKelompok").toString();
        }
        return tahunKelompok;
    }

    /**
     * Digunakan untuk mendapatkan data yang digunakan untuk laporan
     * @param tahunAnggaran
     * @param tahunKelompok
     * @return
     * @throws Exception
     */
    public List<Map> getResultForReport(String tahunAnggaran, String tahunKelompok) throws Exception {
        String sql = "select Nama_unit_kerja,pos.kodePosBiaya,namaPosBiaya,sum(harga*kuantitas) as hasil from ppmk.anggaranRABNonRapatKerja as rab "
                + " inner join ppmk.kelompokBiaya as klpk on rab.kodePosBiaya=klpk.kodePosBiaya "
                + " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=rab.kodePosBiaya inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya "
                + " inner join kamus.unkerja as un on un.Kd_unit_kerja=rab.kodeUnit where isRevisi='Y' and isSudahDiajukan='Y' "
                + " and rab.tahun=? and klpk.tahunKelompok=? group by kodeUnit,rab.kodePosBiaya "
                + " union all "
                + " select Nama_unit_kerja,pos.kodePosBiaya,namaPosBiaya,if(jumlahHari=0,sum(harga*kuantitas),sum(harga*kuantitas*jumlahHari)) as hasil from ppmk.kelompokBiaya as klpk "
                + " inner join ppmk.subkelompokAnggaranBiaya as sub on klpk.kodeKelompokBiaya=sub.kodeKelompokBiaya "
                + " inner join ppmk.anggaranBiayaRapatKerjaDanKegiatan as rab_rapat on rab_rapat.kodePosBiaya=sub.KodePosBiaya "
                + " inner join ppmk.rapatKerjaUnit as rapat on rab_rapat.kodeRapatKerjaSubKegiatan=rapat.idRapatKerjaUnit "
                + " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=klpk.kodePosBiaya "
                + " inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya "
                + " inner join kamus.unkerja as un on un.Kd_unit_kerja=rapat.kodeUnit where klpk.kodeJenisBiaya=1 "
                + " and klpk.kodePosBiaya=5 and tahunKelompok=? and rapat.tahun=? and isRapat='Y' and isRevisi='Y' and isSudahDiajukan='Y' group by kodeUnit,klpk.kodePosBiaya"
                + " union all"
                + " select Nama_unit_kerja,pos.kodePosBiaya,namaPosBiaya,if(jumlahHari=0,sum(harga*kuantitas),sum(harga*kuantitas*jumlahHari)) as hasil from ppmk.kelompokBiaya as klpk "
                + " inner join ppmk.subkelompokAnggaranBiaya as sub on klpk.kodeKelompokBiaya=sub.kodeKelompokBiaya "
                + " inner join ppmk.anggaranBiayaRapatKerjaDanKegiatan as rab_rapat on rab_rapat.kodePosBiaya=sub.KodePosBiaya "
                + " inner join ppmk.kegiatanUnit as keg on rab_rapat.kodeRapatKerjaSubKegiatan=keg.kodeKegiatanUnit "
                + " inner join ppmk.posBiaya as pos on pos.kodePosBiaya=klpk.kodePosBiaya "
                + " inner join ppmk.jenisBiaya as jns on jns.kodeJenisBiaya= klpk.kodeJenisBiaya "
                + " inner join ppmk.kelompokRKA as klpkRKA on klpkRKA.kodeKelompokKegiatan=keg.kodeKelompokKegiatan and klpkRKA.kodePosBiaya=klpk.kodePosBiaya "
                + " inner join kamus.unkerja as un on un.Kd_unit_kerja=keg.kodeUnit where klpk.kodeJenisBiaya=2 "
                + " and tahunKelompok=? and keg.tahun=? and isRapat='N' and isRevisi='Y' and isSudahDiajukan='Y' group by kodeUnit,  klpk.kodePosBiaya order by Nama_unit_kerja,namaPosBiaya";


        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{
                    tahunAnggaran, tahunKelompok,
                    tahunKelompok, tahunAnggaran,
                    tahunKelompok, tahunAnggaran
                });


        /*  String currentNamaUnitKerja = "";
        String currentNamaPosBiaya = "";
        for (Map map : result) {

        if (currentNamaUnitKerja.equalsIgnoreCase(map.get("Nama_unit_kerja").toString())) {
        map.put("Nama_unit_kerja", "");
        map.put("hiddenUnitKerja", currentNamaUnitKerja);
        } else {
        currentNamaUnitKerja = map.get("Nama_unit_kerja").toString();
        //map.put("hiddenUnitKerja", "");

        }

        }*/
        return result;
    }

    public void createTabelTemp() {
        String sql = "create table ppmk.tempRekapAnggaran(id int NULL AUTO_INCREMENT ,  unitKerja varchar (150)   NULL, PRIMARY KEY (id))";
        ClassConnection.getJdbc().update(sql);


        sql = "create table ppmk.tempRekapAnggaranHeader( unitKerja varchar (150)   NULL)";
        ClassConnection.getJdbc().update(sql);
        sql = " insert into ppmk.tempRekapAnggaranHeader (unitKerja) values ('Nama Unit Kerja' )";
        ClassConnection.getJdbc().update(sql);
    }

    public void tambahKolom(String namaKolom, String namaHeader) {
        String sql = "alter table ppmk.tempRekapAnggaran add column `" + namaKolom + "` float(100,2)   DEFAULT '0.00'  ";
        ClassConnection.getJdbc().update(sql);

        sql = "alter table ppmk.tempRekapAnggaranHeader add column `" + namaKolom + "` varchar(100)  null ";
        ClassConnection.getJdbc().update(sql);
        sql = "update ppmk.tempRekapAnggaranHeader set `" + namaKolom + "`='" + namaHeader + "' ";
        ClassConnection.getJdbc().update(sql);
    }

    public String getBarisUnitKerja(String unitKerja) throws Exception {
        String sql = "select id from ppmk.tempRekapAnggaran where unitKerja='" + unitKerja + "' limit 1";
        //Messagebox.show(sql, "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);

        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        String baris = "0";

        if (result.size() > 0) {
            for (Map map : result) {
                baris = map.get("id").toString();
            }
        }
        return baris;
    }

    public void isiKolom(String baris, String namaKolom, String totalAnggaran) {
        String sql = "update ppmk.tempRekapAnggaran set `" + namaKolom + "`='" + totalAnggaran + "' where id=" + baris;
        /* try {
        Messagebox.show(sql, "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
        } catch (InterruptedException ex) {
        Logger.getLogger(LaporanRekapitulasiAnggaranRABUnitDAOImpl.class.getName()).log(Level.SEVERE, null, ex);
        }*/
        ClassConnection.getJdbc().update(sql);
    }

    public void isiUnit(String namaUnit) {
        String sql = "insert into ppmk.tempRekapAnggaran (unitKerja) values('" + namaUnit + "')";
        ClassConnection.getJdbc().update(sql);
    }

    public String getKolomPosBiaya(String kodePosBiaya) throws Exception {
        String sql = "show fields from ppmk.tempRekapAnggaran where field='" + kodePosBiaya + "'";
        //  Messagebox.show(sql, "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        String kolom = "-";
        if (result.size() > 0) {
            for (Map map : result) {
                kolom = map.get("Field").toString();
            }
        }
        return kolom;
    }

    public List<Map> getDataReport() throws Exception {
        String sql = " select * from tempRekapAnggaran ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);

        return result;
    }

    public List<Map> getFields() throws Exception {
        String sql = " show fields from ppmk.tempRekapAnggaran ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);

        return result;
    }

    public List<Map> getFields2() throws Exception {
        String sql = " show fields from ppmk.tempRekapAnggaranHeader ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);

        return result;
    }

    public List<Map> getHeader() throws Exception {
        String sql = " select * from tempRekapAnggaranHeader ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql);

        return result;
    }

    public void dropTabelTemp() {
        String sql = "drop table ppmk.tempRekapAnggaran ";
        ClassConnection.getJdbc().update(sql);


        sql = "drop table ppmk.tempRekapAnggaranHeader ";
        ClassConnection.getJdbc().update(sql);
    }

    public String getSum(String field) {
        String sql = "SELECT SUM(`" + field + "`) "
                + "FROM ppmk.tempRekapAnggaran";
        SqlRowSet rs = ClassConnection.getJdbc().queryForRowSet(sql);
        if (rs.next()) {
            return rs.getString("SUM(`" + field + "`)");
        } else {
            return "0";
        }
    }
}
